0.1 Contexte du jeu de données

Nous sommes un groupe de 4 étudiants de l’Université de Technologie de Troyes et, dans le cadre de notre formation, nous réalisons un projet pour l’enseignement “IF36 – Visualisation de données”.
Notre objectif est d’analyser un jeu de données de notre choix de manière approfondie.

Nous avons choisi de travailler sur un jeu de données ouvert provenant de plusieurs sources françaises, notamment SNCF et Île-de-France Mobilités.
Ce jeu de données offre une vue détaillée du réseau de transport ferroviaire en France, incluant :

  • la ponctualité des trains,
  • les validations de titres de transport,
  • la géolocalisation des arrêts.

Ce dataset nous permet de mieux comprendre les dynamiques du réseau ferré français, aussi bien en termes de régularité que de fréquentation.


Avant de pouvoir effectuer nos analyses et visualisations, nous avons dû procéder à un important travail de nettoyage des données, comprenant :

  • Renommage des colonnes pour une meilleure lisibilité,
  • Traitement des valeurs manquantes,
  • Détection et correction des valeurs aberrantes,
  • Uniformisation des types de données.

Nous avons également supprimé les données concernant les gares étrangères, afin de concentrer notre étude uniquement sur le territoire français.


1. Importation du fichier CSV

Nous avons tout d’abord importé notre jeu de données à l’aide des librairies dplyr et readr.

library(dplyr)
library(readr)

# Chargement du fichier Train_dataset.csv
data_trains <- read_csv("data/Train_dataset.csv")

2. Suppression de colonnes inutiles

Certaines colonnes, contenant uniquement des commentaires textuels (“Comment (optional) delays at departure” et “Comment (optional) delays on arrival”), sont supprimées car elles ne sont pas pertinentes pour notre analyse.

# Suppression des colonnes de commentaires
data_trains <- data_trains %>%
  select(-`Comment (optional) delays at departure`, -`Comment (optional) delays on arrival`)
3. Nettoyage des noms de colonnes

Pour faciliter l’utilisation du dataset, nous avons standardisé les noms de colonnes :

  • Suppression des parenthèses et de leur contenu
  • Remplacement des espaces par des underscores _
  • Suppression des underscores inutiles en fin de nom

# Nettoyage des noms de colonnes
names(data_trains) <- gsub("\\s*\\([^)]*\\)", "", names(data_trains)) # #Retirer les parenthèses
names(data_trains) <- gsub(" ", "_", names(data_trains))              # #Remplacer les espaces par des underscores
names(data_trains) <- gsub("_$", "", names(data_trains))              # #Supprimer un underscore final inutile
4. Suppression des gares étrangères

Notre analyse portant exclusivement sur la France métropolitaine, nous avons filtré les données pour supprimer les trajets passant par certaines gares étrangères (Suisse, Allemagne, Italie, Espagne).

# Liste des gares étrangères à exclure
gares_etranger <- c("LAUSANNE", "ZURICH", "STUTTGART", "ITALIE", "GENEVE", "MADRID", "FRANCFORT")

# Filtrage des trajets
data_trains <- data_trains %>%
  filter(!(Departure_station %in% gares_etranger | Arrival_station %in% gares_etranger))
5. Analyse des données manquantes

Enfin, nous avons calculé le nombre de lignes contenant au moins une valeur manquante (NA) pour évaluer la qualité globale du dataset. Nous avons également extrait ces lignes pour une éventuelle analyse plus poussée.

# Nombre de lignes avec au moins une valeur manquante
nombre_NA <- sum(rowSums(is.na(data_trains)) > 0)
nombre_NA
## [1] 106
# Extraction des lignes contenant des valeurs manquantes
data_NA <- data_trains[apply(data_trains, 1, function(x) any(is.na(x))), ]

Résultat attendu

  • Affichage du nombre de lignes contenant des valeurs manquantes (nombre_NA)

  • Création d’un sous-ensemble data_NA avec uniquement les lignes incomplètes.

1 Évolution des retards dans le temps

Question 0

1.0.1 Interaction avec le graphe

ecrire ici reponse 0

2 Évolution des retards dans le temps

Question 1

2.0.1 Interaction avec le graphe

Dans les graphes suivants :

  • Il est possible de zoomer sur une période précise (exemple : uniquement l’année 2019) pour mieux analyser les pics de retard.

  • On peut montrer/cacher certaines courbes (ex : n’afficher que les retards > 60 min).

  • Il y a également un pop-up interactif qui s’affiche au survol, montrant les valeurs exactes.

  • Certains graphiques sont actuellement affiché pour 2019.

    Plus tard, avec Shiny, nous ajouterons un slider interactif pour choisir l’année dynamiquement.

2.1 Comment la ponctualité évolue-t-elle au fil des mois ?

2.1.1 Explication du graphe

Ce graphique présente l’évolution mensuelle des retards de trains en France de 2015 à 2020.
On y observe deux informations superposées :

  • La ligne verte correspond au nombre de trains arrivés à l’heure chaque mois.

  • Les surfaces colorées empilées représentent le nombre de trains en retard, répartis selon la durée :

    • Retard > 15 minutes (jaune clair)
    • Retard > 30 minutes (orange)
    • Retard > 60 minutes (rouge)


2.1.2 Ce qu’on observe

  • Les retards > 15 minutes représentent une part importante du total, avec des pics marqués notamment en 2018.
  • Le nombre de trains à l’heure reste relativement stable, même si on remarque une légère baisse progressive à certaines périodes.

2.2 Y a-t-il des saisons où les retards sont plus fréquents ?

2.2.1 Explication du graphe

Ce graphique présente la répartition des trains selon leur ponctualité :

  • Trains à l’heure (barres gris clair)
  • Retards > 15 minutes (jaune)
  • Retards > 30 minutes (orange)
  • Retards > 60 minutes (rouge)

Chaque saison est marquée par une ligne verticale pointillée et un label (“Hiver”, “Printemps”, “Été”, “Automne”).

Pas possible d’être possible à la date près (car uniquement des données du mois et pas de jours) donc on a arrondis au mois (exemple : 21 décembre -> 1er janvier pour le début de l’hiver.)


2.2.2 Ce qu’on observe

  • Été (juillet-août) : Pic visible des retards > 15 minutes.
  • Hiver : Augmentation légère des retards, moins marquée que l’été.
  • Printemps et automne : Saisons avec généralement moins de retards.

2.2.3 Top 20 gares avec le plus de retard cumulé (Départ + Arrivée combinés)

  • Cette visualisation montre les retards cumulés (départ + arrivée) par gare et par mois.
  • Certaines gares (Paris Montparnasse, Paris Lyon, Lyon Part-Dieu) concentrent une part majeure des retards, surtout autour de l’été et début de l’automne.

Hypothèse : influence de l’affluence estivale, vacances scolaires, travaux d’été.


2.2.4 Retards au départ uniquement

  • On observe que les retards au départ sont très concentrés sur quelques grandes gares.
  • En particulier Paris Montparnasse, qui ressort beaucoup.

Hypothèse : problèmes organisationnels en gare : gestion de flux, embarquement, correspondances, grèves.


2.2.5 Retards à l’arrivée uniquement

  • Les retards à l’arrivée semblent un peu plus diffus, bien qu’ils restent concentrés sur les gares principales.

Hypothèse : aléas pendant le trajet (accidents, incidents techniques, météo)

On détaillera cela dans une prochaine question.


2.2.6 Répartition des retards par gare

  • Histogramme des 20 gares les plus concernées par les retards.
  • Camembert (Pie chart) : Répartition des retards entre les 3 principales gares vs le reste.

2.2.7 Résultats observés

  • Paris Montparnasse, Paris Lyon et Lyon Part-Dieu concentrent plus de 35% des retards ferroviaires à elles seules.
  • Les autres gares contribuent beaucoup moins individuellement.

2.3 Conclusion générale Question 1

Grâce aux différents graphiques réalisés, nous pouvons conclure :

  • En 2019, les retards ferroviaires sont principalement concentrés sur quelques grandes gares stratégiques.
  • Il existe une saisonnalité des retards : davantage en été (vacances, affluence, chaleur) et en hiver (conditions climatiques, période de Noël).

Bien que l’analyse porte sur l’année 2019, les mêmes tendances générales semblent observables sur 2015–2020.


2.4 Perspectives

Plus tard, avec Shiny, nous créerons une application interactive qui permettra : - De filtrer dynamiquement par année, par gare, par saison, - D’explorer les retards ferroviaires plus efficacement et en temps réel.

Cela permettra de confirmer ou nuancer les tendances mises en évidence ici.